package de.g18.llmaa.gui.lizenzTree;

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

import de.g18.llmaa.gui.App_LLMAA_Controler;
import de.g18.llmaa.gui.IApp_Beobachter;
import de.g18.llmaa.gui.IApp_Controler;
import de.g18.llmaa.gui.IApp_Model;
import de.g18.llmaa.logic.vos.VOProduct_Key;

/**
 * Der Tree ist ein Beobachter des Datenbestandes im {@link IApp_Model}. Bei
 * einer Veränderung wird der Tree neu befüllt. Dazu muss dieser beim Model als
 * beobachter Registriert sein.
 * 
 * @author Gruppe LLMAA
 * 
 */
public class Tree_Lizenz extends JTree implements IApp_Beobachter,
		MouseListener {

	private static DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(
			"Lizenzen");

	public Tree_Lizenz(IApp_Controler appCrtl) {
		super(rootNode);
		appCrtl.registerBeobachter(this);
		setBackground(new Color(31, 57, 116));
		setCellRenderer(new CustomCellRenderer());
		
		this.addMouseListener(this);
	
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {

		/*
		 * Beim Drücken der Rechten Maustaste des Öffnen des jeweiligen
		 * Kotexmenüs.
		 */

		if (arg0.getButton() == arg0.BUTTON3) {
			/*
			 * Holen der des Jehweiligen TreeObjektes auf welches mit der Maus
			 * gedückt wurde.
			 */
			TreePath temp = this.getPathForLocation(arg0.getX(), arg0.getY());
			if (temp != null) {

				DefaultMutableTreeNode temp2 = (DefaultMutableTreeNode) temp
						.getLastPathComponent();

				if (arg0.getButton() == arg0.BUTTON3) {
					if (temp2 instanceof TreeNode_Product) {

						JPopupMenu productNode_Popup = new PopupMenue_Product(
								((TreeNode_Product) temp2).getProduct());

						productNode_Popup.show(this, arg0.getX(), arg0.getY());

					}
					if (temp2 instanceof TreeNode_Key) {
						JPopupMenu product_Key_Popup = new PopupMenue_Key(
								((TreeNode_Key) temp2).getKey());

						product_Key_Popup.show(this, arg0.getX(), arg0.getY());
					}

				}
			}
		}

	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	/**
	 * neu aufbau des Trees
	 */
	@Override
	public void aktualisiere(IApp_Model model) {

		rootNode.removeAllChildren();

		for (VOProduct_Key voProductKey : model.getList_ProductKey()) {
			rootNode.add(new TreeNode_Product(voProductKey));
		}

		updateUI();

	}

}
